package org.java.base.filesAndPaths;

import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 再NIO下，
 *   Java Path接口是Java NIO在Java 6和Java 7中获得的Java NIO 2更新的一部分。
 *   Java 7中将Java Path接口添加到Java NIO中。Path接口位于Java .nio.file包中，
 *   因此Java Path接口的全限定名是Java .nio.file.Path。
 *
 *
 */
public class PathsDemo {

    /**
     * path接口在许多方面与java.io.File类相似，但有一些细微的区别。不过，在许多情况下，您可以使用Path接口代替File类的使用。
     * Paths.get()方法是Path实例的工厂方法。
     */
    public static void main(String[] args) {

        Path path = Paths.get("c:\\data\\myfile.txt");

    }

    /**
     * Java Path方法relativize()可以创建一个新的Path，它表示相对于第一个Path的第二个Path。
     * 例如，路径/data和/data/subdata/subsubdata/myfile.txt"，第二个路径相对于第一个路径可以表示为/subdata/subsubdata/myfile.txt。
     * 看看下面的例子:
     */
    public void relativize(){
        Path basePath = Paths.get("/data");
        Path path     = Paths.get("/data/subdata/subsubdata/myfile.txt");

        Path basePathToPath = basePath.relativize(path);
        Path pathToBasePath = path.relativize(basePath);

        System.out.println(basePathToPath);
        System.out.println(pathToBasePath);

    }

    /**
     * Path接口的normalize()方法可以对路径进行规范化。规范化意味着它删除了所有的. .,代码在路径字符串的中间，
     * 并解析路径字符串所指的路径。下面是一个Java Path.normalize()示例:
     *
     * path1 = d:\data\projects\a-project\..\another-project
     * path2 = d:\data\projects\another-project
     */
    public void normalize(){
        String originalPath =
            "d:\\data\\projects\\a-project\\..\\another-project";

        Path path1 = Paths.get(originalPath);
        System.out.println("path1 = " + path1);

        Path path2 = path1.normalize();
        System.out.println("path2 = " + path2);
    }
}
